<?php

class ViagemModel extends Model {
    
    const P_KEY = 'ID';
    const T_NAME = 'Viagem';
    
    public static function GetByID($ID){
        $Viagem = null;
        $Result = parent::getByKey(self::T_NAME, self::P_KEY, $ID);
        if(!empty($Result)){
            $Viagem = self::CreateViagem($Result);
        }
        return $Viagem;
    }
    
    private static function CreateViagem($Result){
        $Viagem = new Viagem($Result['ID']);
        $Viagem->setHorarioPartida($Result['HorarioPartida']);
        $Viagem->setHorarioChegada($Result['HorarioChegada']);
        $Viagem->setKmDistancia($Result['KmDistancia']);
        $Viagem->setPrecoPassagem($Result['PrecoPassagem']);
        $Viagem->setCidadeOrigem(CidadeModel::GetByCodigo($Result['CodigoCidadeOrigem']));
        $Viagem->setCidadeDestino(CidadeModel::GetByCodigo($Result['CodigoCidadeDestino']));
        $Viagem->setOnibus(OnibusModel::GetByID($Result['IDOnibus']));
        $Viagem->setMotoristas(MotoristaModel::GetByViagem($Result['ID']));
        return $Viagem;
    }
    
    public static function GetProximasViagens($limite = 10){
        $db = DB::getInstance();
        $db->execute('SELECT * FROM "Viagem" WHERE "HorarioPartida" > CURRENT_TIMESTAMP ORDER BY "HorarioPartida" LIMIT ' . $limite);
        $ArResult = $db->fetchAll();
        $db->close();
        return self::GetObjectsFromResult($ArResult);
    }
    
    public static function GetViagensSearch($cidadeOrigem, $cidadeDestino, $dataPartida){
        $db = DB::getInstance();
        
        $StQuery = 'SELECT * FROM "Viagem" WHERE';
        $StQuery .= ' "CodigoCidadeOrigem" = ' . $cidadeOrigem;
        $StQuery .= ' AND "CodigoCidadeDestino" = ' . $cidadeDestino;
        $StQuery .= ' AND ' . (empty($dataPartida) ? '"HorarioPartida" > CURRENT_TIMESTAMP' : '"HorarioPartida"::timestamp::date = \'' . $dataPartida . "' AND " . '"HorarioPartida" > CURRENT_TIMESTAMP');
        $StQuery .= ' ORDER BY "HorarioPartida"';
        
        $db->execute($StQuery);
        $ArResult = $db->fetchAll();
        $db->close();
        return self::GetObjectsFromResult($ArResult);
    }
    
    private static function GetObjectsFromResult($ArResult){
        $ArViagens = array();
        foreach($ArResult as $Result){
            $ArViagens[] = self::CreateViagem($Result);
        }
        return $ArViagens;
    }
    
    public static function GetPoltronasCompradas($IDViagem){
        $db = DB::getInstance();
        $db->execute('SELECT "NumeroPoltrona" FROM "Passagem" WHERE "IDViagem" = ' . $IDViagem);
        $ArResult = $db->fetchAll();
        $PoltronasCompradas = array();
        foreach($ArResult as $Result)
            $PoltronasCompradas[] = $Result['NumeroPoltrona'];
        $db->close();
        return $PoltronasCompradas;
    }
}

?>